package cn.tedu.d1_thread;
/*
 本类用来完成多线程编程实现方案一
 */
public class Test1_Thread {
    public static void main(String[] args) {
        MyThread t=new MyThread();//新建线程对象
        MyThread t2=new MyThread();
        MyThread t3=new MyThread("齐天大圣过火山");

        t.start();//就绪状态
        t2.start();
        t3.start();
        /*
        1.如果只是调用两个线程的run()方法，会依次执行，不会打架
        2.想要使用多线程效果，必须调用start()方法，才真正把线程加入就绪队列
        3.run()与start()的本质区别：
          run()只是当做一个单线程方法运行，无法体现多线程
        4.调用start()方法,底层会自动调用run()执行业务
         */

        /*
         线程的随机性：
         CPU会随机根据算法调度线程们，无法控制
         */
       //t.run();//Calls to 'run()' should probably be replaced with 'start()'
       //t2.run();
    }
}

//自定义多线程类
/*
 继承Thread类
 1.线程中的业务是写在run()方法里的

 */
class MyThread extends Thread{
    /**
    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }
     */
    public MyThread(){

    }
    /*
     为了修改线程的名称，不再使用系统的默认名称
     需要提供含参构造，并在构造中调用父类给线程起名的构造函数
     */
    public MyThread(String name){
        super(name);
    }


    //2.重写Thread父类中的run()方法
    @Override
    public void run() {
        //super.run();不用父类的run()方法

        //写业务：输出10次当前正在执行的线程名称
        //getName()
        for (int i = 0; i < 10; i++) {
            System.out.println(i+"="+getName());
        }
    }

}
